package mensagens;

import o2b.IStream;
import o2b.MarshallableException;
import cliente.tipos.Hospede;

public class ManterHospede extends Mensagem {
	private Hospede hospede;

	/**
	 *  1 - cadastrar Hóspede;
	 *   11 - resposta cadastrar Hóspede OK
	 *   12 - resposta cadastrar Hóspede NOK
	 *	2 - procurar Hóspede;
	 *   21 - resposta procurar Hóspede OK 
	 *   22 - resposta procurar Hóspede NOK
	 *	3 - alterar Hóspede; 
	 *	 31 - resposta alterar Hóspede OK
	 *	 32	- resposta alterar Hóspede NOK
	 *	4 - apagar Hóspede;
	 *	 41 - resposta apagar Hóspede OK
	 *	 42 - resposta apagar Hóspede NOK
	 *  
	**/
	private int tipoManterHospede;
	
	/**
	 * Construtor Padrão
	 */
	public ManterHospede() {
		tipo = TipoMensagem.MANTERHOSPEDE;
		setHospede(new Hospede());
	}
	
	/**
	 * Construtor de mensagem usando o subtipo
	 * @param tipoManterHospede tipo de manter hóspede:
	 *  1 - cadastrar Hóspede;
	 *   11 - resposta cadastrar Hóspede OK
	 *   12 - resposta cadastrar Hóspede NOK
	 *	2 - procurar Hóspede;
	 *   21 - resposta procurar Hóspede OK 
	 *   22 - resposta procurar Hóspede NOK
	 *	3 - alterar Hóspede; 
	 *	 31 - resposta alterar Hóspede OK
	 *	 32	- resposta alterar Hóspede NOK
	 *	4 - apagar Hóspede;
	 *	 41 - resposta apagar Hóspede OK
	 *	 42 - resposta apagar Hóspede NOK
	 */
	public ManterHospede(int tipoManterHospede){
		tipo = TipoMensagem.MANTERHOSPEDE;
		setTipoManterHospede(tipoManterHospede);
		setHospede(new Hospede());
	}

	public void marshal(IStream stream) throws MarshallableException {
		super.marshal(stream); 								// Envia o tipo da mensagem
		stream.write(getTipoManterHospede());				// Envia o subtipo da mensagem
		switch(getTipoManterHospede()){
			case 1:
				stream.write(getHospede().getNome());
				stream.write(getHospede().getCpf());
				break;
				
			case 11:
				break;
				
			case 12:
				break;
				
			case 2:
				stream.write(getHospede().getNome());
				stream.write(getHospede().getCpf());
				break;
				
			case 21:
				break;
				
			case 22:
				break;
				
			case 3:
				stream.write(getHospede().getNome());
				stream.write(getHospede().getCpf());
				break;
				
			case 31:
				break;
				
			case 32:
				break;
				
			case 4:
				stream.write(getHospede().getNome());
				stream.write(getHospede().getCpf());
				break;
				
			case 41:
				break;
				
			case 42:
				break;
			
			default:
				break;
		}
	}
	
	
	@Override
	public void unmarshal(IStream stream) throws MarshallableException {
		// extrai o subtipo da mensagem
		setTipoManterHospede(stream.readInt());
		
		// Trata o subtipo da mensagem:
		switch (getTipoManterHospede()) {
			case 1:
				break;
				
			case 11:
				// Não faz nada
				break;
				
			case 12:
				// Não faz nada
				break;
				
			case 2:
				getHospede().setNome((String)stream.readObject());
				getHospede().setCpf((String)stream.readObject());
				break;
				
			case 21:
				getHospede().setNome((String)stream.readObject());
				getHospede().setCpf((String)stream.readObject());
				break;
				
			case 22:
				// Não faz nada
				break;
				
			case 3:
				break;
				
			case 31:
				// Não faz nada
				break;
				
			case 32:
				// Não faz nada
				break;
				
			case 4:
				break;
				
			case 41:
				// Não faz nada
				break;
				
			case 42:
				// Não faz nada
				break;
			
			default:
				break;
		}
	}
	
	public void setHospede(Hospede hospede) {
		this.hospede = hospede;
	}

	public Hospede getHospede() {
		return hospede;
	}

	public void setTipoManterHospede(int tipoManterHospede) {
		this.tipoManterHospede = tipoManterHospede;
	}

	public int getTipoManterHospede() {
		return tipoManterHospede;
	}

}
